/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package PanelesDeMenu;

import PanelesDeTrabajo.PanelPrincipalMenu;
import com.google.gson.Gson;
import java.awt.BorderLayout;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import net.miginfocom.swing.MigLayout;

/**
 *
 * @author Anonymus
 */
public class PanelVerMenu extends JPanel
{
    JPanel panel1;
    JPanel panel2;
    JPanel panel3;
    JPanel panel31;
    JPanel panel4;
    JPanel panelAux1;
    JPanel panelAux2;
    JPanel panelAux3;
    JPanel panelAux4;
    
    //COMPONENTES
    JLabel LNombre;
    JLabel LPrecio;
    JLabel LFoto;
    JLabel LCalorias;
    JLabel LDescripcion;
    JLabel LRecomendacion;
    JLabel LPlato;
    JLabel LProducto;
    JLabel LValoracion;
    JLabel LPuntuacion;
    //TextFields
    JTextField TPrecio;
    JTextField TCalorias;
    JTextField TValoracion;
    JTextField TPuntuacion;
    //TextAreas
    JTextArea TDescripcion;
    JTextArea TRecomendacion;
    JScrollPane scrollDescripcion;
    JScrollPane scrollRecomendacion;
    //Table
    JTable tabla;
    DefaultTableModel modelo;
    JScrollPane scrollTabla;
    //ComboBox
    JComboBox nombre;
    private ArrayList<Menus> menus = new ArrayList<Menus>();
    private List<String> nombresMenus = new ArrayList<String>();
    private Gson gson = new Gson();

    public PanelVerMenu(ArrayList<Menus> menus) 
    {
        this.setLayout(new BorderLayout());
        this.menus = menus;
        panel1 = new JPanel(new BorderLayout());
        panelAux1 = new JPanel(new MigLayout());
        panelAux2 = new JPanel(new MigLayout());
        panel2 = new JPanel(new MigLayout());
        panelAux3 = new JPanel(new BorderLayout());
        panelAux4 = new JPanel(new BorderLayout());
        panel3 = new JPanel(new MigLayout());
        panel31 = new JPanel(new MigLayout());
        
        LNombre = new JLabel("Nombre: ");
        LPrecio = new JLabel("Precio: $");
        LFoto = new JLabel("Foto: ");
        LCalorias = new JLabel("Aporte Calorico: (Kcal)");
        LDescripcion = new JLabel("Descripcion ");
        LRecomendacion = new JLabel("Recomendacion ");
        LPlato = new JLabel("Plato");
        LProducto = new JLabel("Producto");
        LValoracion = new JLabel("Valoracion: ");
        LPuntuacion = new JLabel("Puntuacion: ");
        
        TPrecio = new JTextField(10);
        TPrecio.setEditable(false);
        TCalorias = new JTextField(10);
        TCalorias.setEditable(false);
        
        TValoracion = new JTextField(8);
        TValoracion.setEditable(false);
        
        TPuntuacion = new JTextField(8);
        TPuntuacion.setEditable(false);
        
        TDescripcion = new JTextArea(10, 28);
        TRecomendacion = new JTextArea(10, 28);
        

        scrollDescripcion = new JScrollPane(this.TDescripcion);
        scrollRecomendacion = new JScrollPane(this.TRecomendacion);

        modelo = new DefaultTableModel();
        tabla = new JTable(modelo);
        modelo.addColumn("Nombre");
        modelo.addColumn("Kcal");
        modelo.addColumn("Componentes $");
        modelo.addColumn("Precio Venta $");
        modelo.addColumn("Platos");
        modelo.addColumn("Productos");
        this.tabla.getColumnModel().getColumn(0).setPreferredWidth(5);
        this.tabla.getColumnModel().getColumn(1).setPreferredWidth(5);
        this.tabla.getColumnModel().getColumn(2).setPreferredWidth(5);
        this.tabla.getColumnModel().getColumn(3).setPreferredWidth(5);
        tabla.getTableHeader().setReorderingAllowed(false);
        scrollTabla = new JScrollPane(this.tabla);
        scrollTabla.setViewportView(this.tabla);

        nombre = new JComboBox();

        //Se agregan todos los componentes del panel principal
        this.panelAux1.add(this.LNombre);
        this.panelAux1.add(this.nombre);
        this.panelAux2.add(this.LPrecio);
        this.panelAux2.add(this.TPrecio);
        this.panelAux2.add(this.LCalorias);
        this.panelAux2.add(this.TCalorias);
        this.panelAux2.add(this.LFoto);

//        this.panel1.add(this.panelAux1, BorderLayout.NORTH);
//        this.panel1.add(this.panelAux2, BorderLayout.CENTER);

        this.panel31.add(this.LValoracion);
        this.panel31.add(this.TValoracion,"wrap");
        this.panel31.add(this.LPuntuacion);
        this.panel31.add(this.TPuntuacion);
        
        this.panel3.add(this.LDescripcion,"wrap");
        this.panel3.add(this.scrollDescripcion,"wrap");
        this.panel3.add(this.LRecomendacion,"wrap");
        this.panel3.add(this.scrollRecomendacion,"wrap");
        this.panel3.add(this.panel31);
        

//        this.panelAux3.add(this.panel2, BorderLayout.NORTH);
//        this.panelAux3.add(this.scrollTabla, BorderLayout.CENTER);
//        this.panelAux3.add(this.panel3, BorderLayout.EAST);
//        this.panelAux3.add(this.panelAux4, BorderLayout.SOUTH);
        
        this.add(scrollTabla, BorderLayout.CENTER);


        cargarNombresMenus();
        llenarTablaVisible();

//        this.add(this.panel1, BorderLayout.NORTH);
//        this.add(this.panelAux3, BorderLayout.WEST);


    }
    
    public void cargarNombresMenus()
    {
        nombresMenus.clear();
        
        for (int i=0; i<menus.size(); i++)
        {
            nombresMenus.add(menus.get(i).getNombre());
        }
        Collections.sort(nombresMenus);
    }
    
    public void llenarTablaVisible()
    {
        while (modelo.getRowCount() > 0)
        {
            modelo.removeRow(0);
        }
        
        for (int i=0; i<nombresMenus.size(); i++)
        {
            String nombreMenu = nombresMenus.get(i);
            int indice = indiceNombreMenu(nombreMenu);
            String nombre = menus.get(indice).getNombre();
            String kcal = menus.get(indice).getAporteCalorico()+"";
            String precioTotalComponentes = precioComponentes(indice)+"";
            String precioVenta = menus.get(indice).getPrecio()+"";
            String platos = nombresPlatos(indice);
            String productos = nombresProdutos(indice);
            Object[] filaMenu = {nombre, kcal, precioTotalComponentes, precioVenta, platos, productos};
            modelo.addRow(filaMenu);
        }
    }
    
    public int indiceNombreMenu(String nombreMenu) //buscamos el indice del nombre del array desordenado dado del arraylist ordenado
    {
        for (int i=0; i<menus.size(); i++)
        {
            if (nombreMenu.equals(menus.get(i).getNombre()))
            {
                return i;
            }
        }
        return 0;
    }
    
    public int precioComponentes(int indiceMenu) //Contamos el precio total de los platos y de productos
    {
        int precio = 0;
        
        for (int i=0; i<menus.get(indiceMenu).getPlatos().size(); i++) //Recorremos los platos de un menu especifico
        {
            precio = precio + menus.get(indiceMenu).getPlatos().get(i).getPrecio(); //Sumamos el total + precio de un plato especifico
        }
        for (int i=0; i<menus.get(indiceMenu).getProductos().size(); i++)
        {
            precio = precio + menus.get(indiceMenu).getProductos().get(i).getPrecio();
        }
        return precio;
    }
    
    public String nombresPlatos(int indiceMenu)
    {
        String platos = "";
        
        for (int i=0; i<menus.get(indiceMenu).getPlatos().size(); i++)
        {
            if (i == menus.get(indiceMenu).getPlatos().size() - 1)
            {
                platos = platos + menus.get(indiceMenu).getPlatos().get(i).getNombre();
            }
            else
            {
                platos = platos + menus.get(indiceMenu).getPlatos().get(i).getNombre()+", ";
            }
        }
        return platos;
    }
    
    public String nombresProdutos(int indiceMenu)
    {
        String productos = "";
        
        for (int i=0; i<menus.get(indiceMenu).getProductos().size(); i++)
        {
            if (i == menus.get(indiceMenu).getProductos().size() - 1)
            {
                productos = productos + menus.get(indiceMenu).getProductos().get(i).getNombre();
            }
            else
            {
                productos = productos + menus.get(indiceMenu).getProductos().get(i).getNombre()+", ";
            }
        }
        return productos;
    }
    
    public void leerTxtMenus()
    {
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        menus.clear();
        
        try
        {
            archivo = new File ("C:\\BaseDeDatos\\menus.txt");
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            
            String linea;
            
            while((linea=br.readLine())!=null)
            {
                Menus menu = (Menus)gson.fromJson(linea, Menus.class);
                menus.add(menu);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if( null != fr )
                {   
                    fr.close();     
                }                  
            }
            catch (Exception e2)
            {
                e2.printStackTrace();
            }
        }
    }
///////////FIN DE LA CLASE panelVerMenu   
}
